package oop;

/**
 * 测试重写  override
 * override与overload(重载)完全无关
 * 子类重写父类的方法，可以用自身行为替换父类行为，重写是实现多态的必要条件
 */
/*方法重写的三个要点：
* “= =”  : 方法名、形参列表相同
* “<=”  : 返回值类型和声明导常类型，子类小于等父类
* “>=”  : 访问权限  子类大于等于父类*/

public class TestOverride {
    public static void main(String[] args) {
        Horse h = new Horse();
        h.run();
        h.getVehicle();
        Plane p = new Plane();
        p.getVehicle();
    }
}
class Vehicle {   //交通工具
    public void run() {
        System.out.println("run.....");
    }
    public  Vehicle getVehicle() {
        System.out.println("给你一个交通工具");
        return null;
    }
}
class Horse extends Vehicle {  //   继承    马也是交通工具
    @Override  //重写  之前的看不到，因为复盖了
    public void run(){  //方法名、形参列表相同  run()
        System.out.println("得得得。。。。");
    }

    @Override
    public Horse getVehicle() {  //返回值类型和声明导常类型，子类小于等父类  马属于交通工具
        return new Horse();
    }
}
class Plane extends Vehicle {

    @Override
    public Vehicle getVehicle() {  //返回值类型和声明导常类型，子类小于等父类  Vehicle
        System.out.println("Plan飞机");
        return new Vehicle();
    }

    @Override
    public void run() {
        System.out.println("Plane飞啊");
    }
}